class CommercialBank2 {
  public address: string = 'beijing'
  public name: string = 'wangwu'
  static count: number

  /**
   * 构造函数 的名字就是类名 constructor CommercialBank2 名字前面用 constructor 来区别其他函数
   */
  constructor(name: string, address: string) {
    this.address = address
    this.name = name
  }
  loan(): void {
    console.log(this.name + ' 银行贷款')
  }
}

// 1. 类构造函数对象变量
CommercialBank2.count

//CommercialBank 双重性质
// 1.类构造函数对象变
//CommercialBank.count
// 2.创建类对象的一个类型【new 后面出现的就是】
let cb = new CommercialBank2('df', 'ds')

/**
 * 怎么表示构造函数的类型呢
 * 这里为什么要加上new呢？例如
 * (...arg: any) => CommercialBank2 是一个普通函数 代表的一个返回 CommercialBank2 的普通函数类型
 * 也就表示 test() : CommercialBank2 {}
 * 所以加上 new 以区分，这个new 并不是创建的意思，而是后面的用来表示一个构造函数的
 * 但是这样不通用
 */
type CommercialBankType = new (...arg: any) => CommercialBank2

/**
 * 为什么返回值是 any 呢， 因为不清楚传过来的是哪个类，可以是学生类或者权限类等等
 * 所以是any类型，可以代表任意一个构造函数类型
 * 
 */
type ConstructorType = new (...arg: any) => any
